package com.heboan.code1;


/*
    定义一个长度为[16][16]的整型二维数组并输入或指定所有位置的元素值
    分别实现二维数组中所有行和所有列中所有元素的累加和并打印。
    再分别实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印。
*/


import java.util.Arrays;
import java.util.Random;

public class Demo01 {
    public static void main(String[] args) {

        // 1.定义一个长度为[16][16]的整型二维数组
        int[][] arr = new int[16][16];

        Random random = new Random();
        // 2.给数组所有位置指定元素值,0-10的随机数
        for (int i=0; i<arr.length; i++) {
            for (int j=0; j< arr[i].length; j++){
                int num = random.nextInt(10);
                arr[i][j] = num;
            }
        }

        // 打印二维数组
        for (int i = 0; i < arr.length; i++) {
            System.out.println(Arrays.toString(arr[i]));
        }

        // 3.1 实现二维数组中所有行中所有元素的累加和并打印
        int sumA = 0;
        for (int i=0; i<arr.length; i++){
            // 初始化每行的总和
            int lineSum = 0;
            for (int j=0; j< arr[i].length; j++){
                lineSum += arr[i][j];
            }
            // 行的总和累加到所有元素总和
            sumA += lineSum;
        }
        System.out.println("二维数组中所有行中所有元素的累加和:" + sumA);
        System.out.println("------------------------------------------------");

        // 3.2 现二维数组中所有列中所有元素的累加和并打印
        int sumB = 0;
        for (int i=0; i<arr.length; i++){
            //  初始化每列的总和
            int columeSum = 0;
            for (int j=0; j<arr.length; j++) {
                int num = arr[j][i];
                columeSum += num;
            }
            sumB += columeSum;
        }

        System.out.println("二维数组中所有列中所有元素的累加和:" + sumB);
        System.out.println("------------------------------------------------");


        // 4.1实现二维数组中左上角到右下角所有元素的累加和并打印
        int sumC = 0;
        for (int i=0; i<arr.length; i++) {
            // 第一行去1个元素，第二行取2个元素，以此类推
            for (int j =0; j<=i; j++){
                sumC += arr[i][j];
            }
        }

        System.out.println("二维数组中左上角到右下角所有元素的累加:" + sumC);
        System.out.println("------------------------------------------------");

        // 4.2实现二维数组中右上角到左下角所有元素的累加和并打印
        int sumD = 0;
        for (int i=0; i<arr.length; i++) {
            // 第一行去1个元素，第二行取2个元素
            for (int j =0; j<=i; j++){
                // 每行的元素从数组后面开始取，取得元素个数和行号对应
                sumD += arr[i][arr.length-1-j];
            }
        }
        System.out.println("二维数组中右上角到左下角所有元素的累加:" + sumD);

    }
}
